<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的拓展</title>
</head>
<body>
    <script>
        /**
         * 函数参数的默认值
         * 当函数在调用的时候不传值的话可以使用默认值
        */
        // foo1();   
        // function foo1(x=0,y=0){
        //   console.log(x,y);
        // }

        /*函数的默认值参数有一点容易混淆的是如果函数的参数是对象的话
        那么传递空对象也算传值，也就是不会触发函数的默认参数*/

        //当函数调用的时候不传递对象的话会使用空对象
        // function foo(item={}){
        // }

        /*结合结构赋值一起使用
        */
        //  function foo({name="Jack",age=12} ={}){

        //  }

        /*
          基于函数的默认值参数可以实现函数在调用时如果不传参数就报错
        */

        // function reportError(){
        //     throw new Error("要传递参数");
        // }

        // function foo(obj=reportError()){
        //     console.log(obj);
        // }

        // foo();

        /**
         * 函数的length属性保存的是函数中没有赋值的参数的个数
         *
         *  指定了默认值以后，函数的length属性，将返回没有指定默认值的参数个数。
         *  也就是说，指定了默认值后，length属性将失真
        */

        // function foo(n1=123,n2){
        //     console.log(foo.length);
        // }

        // foo(1,2)
    </script>
</body>
</html>